package com.fkdx.webman.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

/**
 * 动态cron配置依赖
 *
 * @author wsh
 * @date 2022-09-09 18:14
 **/
@Configuration
public class ScheduleConfig {
  @Bean
  public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
    ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
    executor.setPoolSize(20);
    executor.setThreadNamePrefix("taskExecutor-");
    //用来设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean，这样这些异步任务的销毁就会先于Redis线程池的销毁。
    executor.setWaitForTasksToCompleteOnShutdown(true);
    //该方法用来设置线程池中任务的等待时间，如果超过这个时候还没有销毁就强制销毁，以确保应用最后能够被关闭，而不是阻塞住。
    executor.setAwaitTerminationSeconds(60);
    //队列超出异常处理方式异常处理方式
    executor.setRejectedExecutionHandler(new OrderEventThreadRejected());
    executor.initialize();
    return executor;
  }
}
